﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.Linq;
using System.ServiceProcess;
using System.Text;
using EntitiesLayer;
using DataLayer;
using Bitacora;
using BusinessLayer;

namespace BatchImporterService_Cleaner
{
    public partial class BatchImporterService_Cleaner : ServiceBase
    {
        public BatchImporterService_Cleaner()
        {
            InitializeComponent();
        }

        private bool VerificarConfiguracion()
        {
            if (Configuracion.identificacionSistema.Equals(""))
            {
                Services.EnviarLog("Unisys Batch Importer Cleaner", 64, "El parametro systemID no puede estar en blanco", "VerificarConfiguracion", Bitacora.TipoError.Error);
                return false;
            }

            if (Configuracion.ubicacionLogs.Equals(""))
            {
                Services.EnviarLog("Unisys Batch Importer Cleaner", 64, "El parametro logLocation no puede estar en blanco", "VerificarConfiguracion", Bitacora.TipoError.Error);
                return false;
            }

            if (Configuracion.tamanoMaximoLogsBytes <= 0)
            {
                Services.EnviarLog("Unisys Batch Importer Cleaner", 64, "El parametro logMaxSizeBytes no puede ser menor a 0", "VerificarConfiguracion", Bitacora.TipoError.Error);
                return false;
            }

            if (Configuracion.diasValidez <= 0)
            {
                Services.EnviarLog("Unisys Batch Importer Cleaner", 64, "El parametro logMaxSizeBytes no puede ser menor a 0", "VerificarConfiguracion", Bitacora.TipoError.Error);
                return false;
            }

            if (!(this.VerificarBaseDatos()))
                return false;

            return true;

        }

        private bool VerificarBaseDatos()
        {
            try
            {
                SqlDataClass.ProbarConnection();
                Services.EnviarLog("Unisys Batch Importer Cleaner", 514, "Conexión de Base de Datos Realizada Correctamente", "VerificarBaseDatos", Bitacora.TipoError.Informacion);
                return true;
            }
            catch (Exception e)
            {
                Services.EnviarLog("Unisys Batch Importer Cleaner", 151, "Imposible conectar con la Base de Datos: " + e.Message, "VerificarBaseDatos", Bitacora.TipoError.Error, e);
                return false;
            }
        }

        protected override void OnStart(string[] args)
        {
            //System.Diagnostics.Debugger.Launch();

            #region Load Configuration
            try
            {
               
                if (!(this.VerificarConfiguracion()))
                {
                    Logger.LogEnWindows("Error al intentar leer la configuracion de la aplicacion. La verificacion de la configuracion" +
                    " no ha finalizado con exito, favor revise la configuracion", "Unisys Batch Importer Services", "Unisys Batch Importer Services");
                    System.Environment.Exit(0);
                }
            }
            catch (Exception e)
            {
                Logger.LogEnWindows("Error al intentar leer la configuracion de la aplicacion " + e.Message, "Unisys Batch Importer Services", "Unisys Batch Importer Services");
                System.Environment.Exit(0);
            }

            Services.EnviarLog("Unisys Batch Importer Cleaner",251, "El servicio Unisys Batch Importer Cleaner ha levantado su configuración correctamente.", "OnStart", Bitacora.TipoError.Log);


            Services.EnviarLog("Unisys Batch Importer Cleaner", 252, "Configuración cargada correctamente con los siguientes valores:" +
                 "\n Ubicación de Logs: [" + Configuracion.ubicacionLogs +
                "]\n Ruta Archivos Imagen: " + "[" + Configuracion.rutaImagenes +
                "]\n Ruta Archivos Data Cargados: " + "[" + Configuracion.rutaArchivosCargados +
                "]\n Identificación del Sistema: [" + Configuracion.identificacionSistema +
                "]\n Días Válidez de Archivos: [" + Configuracion.diasValidez.ToString() +
                "]\n Activar Eliminación Registro Base Datos: [" + Configuracion.eliminarDeBD.ToString() +
                "]\n Activar Eliminación Archivos Data: [" + Configuracion.eliminarData.ToString() +
                "]\n Activar Eliminación Archivos Imagen: [" + Configuracion.eliminarImagenes.ToString() +
                "]",
                "OnStart", Bitacora.TipoError.Informacion);
            #endregion

            this.backgroundWorker1.RunWorkerAsync();
            

        }

        protected override void OnStop()
        {
            this.backgroundWorker1.CancelAsync();
            Services.EnviarLog("Unisys Batch Importer Cleaner", 263, "*******        Unisys Batch Importer Cleaner detenido correctamente       *******", "OnStop", Bitacora.TipoError.Log);
        }

        private void BackgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
        {
            backgroundWorker1.WorkerSupportsCancellation = true;

            while (!backgroundWorker1.CancellationPending)
            {

                {
                    Services.EnviarLog("Unisys Batch Importer Cleaner", 264, "*********        Unisys Batch Importer Cleaner iniciado correctamente      ********", "BackgroundWorker1_DoWork", Bitacora.TipoError.Log);

                    CleanManager.LimpiarDatos();
                    Services.EnviarLog("Unisys Batch Importer Cleaner", 525, "Ciclo de proceso concluido y desactivado.", "BackgroundWorker1_DoWork", Bitacora.TipoError.Log);


                    int delayTM = Configuracion.diasValidez * 24 * 60;

                    Services.EnviarLog("Unisys Batch Importer Cleaner", 526, "Próximo ciclo dará inicio en " + delayTM + " minutos.", "BackgroundWorker1_DoWork", Bitacora.TipoError.Log);
                    System.Threading.Thread.Sleep(delayTM * 60 * 1000);


                }

            }
        }


    }
}
